package exsun.jt808.data.media.operate.util;

import exsun.jt808.data.util.parse.BitOperator;
import exsun.jt808.data.media.data.MsgPackage;

import java.util.Calendar;

@SuppressWarnings("unused")
public class DecoderRtp {

	public static byte[] b = null;

	public  static  byte[] msgTobytes(MsgPackage msgPackage)
	{
		String title = "3031636481";//固定值3031636481
		int m = 1;//下发均为包含帧边界的原子包
//		int pt = 6;//编码类型 6:G711a  26:adpcm  8:G726
		int pt = msgPackage.getPt();
		int next = (int)(m * Math.pow(2,7) + pt);
		int packageNum = IdGenRtp.getSingleton().genId();//包序号
		String phoneNum = msgPackage.getClientIdChannel().split("_")[0];//设备号
		int channel = Integer.parseInt(msgPackage.getClientIdChannel().split("_")[1]);//逻辑通道号
		int cuttag = 48;//数据类型与分包标志
		long datetemp = Calendar.getInstance().getTime().getTime();//时间戳
		int dataLenth = msgPackage.getData().length;//数据体长度
		return  BitOperator.concatAll(
				BitOperator.hexstringToBytes(title), //固定标头
				BitOperator.integerTo1Bytes(next),//边界与编码类型
				BitOperator.integerTo2Bytes(packageNum),//包序号
				BitOperator.hexstringToBytes(phoneNum),//设备号
				BitOperator.integerTo1Bytes(channel),//通道号
				BitOperator.integerTo1Bytes(cuttag),//数据类型与分包标记
				BitOperator.longToBytes(datetemp,8),//时间戳
				BitOperator.integerTo2Bytes(dataLenth),//数据长度
				msgPackage.getData()//数据体
		);
	}



//	public static byte[] decoderString(String rtp) {
//		String byte0_4 = rtp.substring(0, 10);// 固定值3031636481
//		int byte5 = Integer.parseInt(rtp.substring(10, 12), 16);
//		int flag = byte5 >> 7; // 标志位，确定是否完整数据帧的边界
//		int pt = byte5 & 0x7F; // 负载类型，见表12
//		int flow = Integer.parseInt(rtp.substring(12, 16), 16);// 包序号
//		String phone = rtp.substring(16, 28);
//		int channel = Integer.parseInt(rtp.substring(28, 30), 16);
//		int byte15 = Integer.parseInt(rtp.substring(30, 32), 16);//
//		int dataType = byte15 >> 4;
//		int pack = byte15 & 0x0F;
//		String over = rtp.substring(32);
//		if (dataType != 4) {
//			String time = over.substring(0, 16);
//			over = over.substring(16);
//		}
//		if (dataType <= 2) {
//			int time1 = Integer.parseInt(over.substring(0, 4), 16);
//			int time2 = Integer.parseInt(over.substring(4, 8), 16);
//			over = over.substring(8);
//		}
//		int len = Integer.parseInt(over.substring(0, 4), 16);
//		String body = over.substring(4);
//		int bodylen = body.length() / 2;
//		if (flag == 1 && pack == 0) {
//			byte[] ret = HexStringUtils.getBytesFromHexStr(body);
//			return ret;
//		} else {
//			if (flag == 0 && pack == 1) {
//				b = HexStringUtils.getBytesFromHexStr(body);
//			} else if (flag == 0 && pack == 3) {
//				byte[] c = HexStringUtils.getBytesFromHexStr(body);
//				b = BitOperator.concatAll(b, c);
//			} else if (flag == 1 && pack == 2) {
//				byte[] c = HexStringUtils.getBytesFromHexStr(body);
//				b = BitOperator.concatAll(b, c);
//				return b;
//			}
//		}
//		return null;
//	}
//
//	public static void decoderByteBuf(ByteBuf b) {
//		b.readBytes(4);// 帧头标识
//		b.readByte();// V,P,X,CC固定值
//		b.readByte();// 标识位(1bit)及负载类型(7bits)
//		int flowId = b.readByte() << 8 | b.readByte();
//		String phone = BCD8421Operater.bcd2String(b.readBytes(6).array());
//		int logic = b.readByte();
//		int byte15 = b.readByte();
//		int dataType = byte15 >> 4;
//		int subpackage = byte15 & 0x0F;
//		if (dataType != 4) {
//			b.readBytes(8);
//			// byte[] timestamp = b.readBytes(8).array();
//		}
//		if (dataType <= 2) {
//			b.readBytes(4);
//		}
//		int dataLength = b.readUnsignedShort();
//		byte[] data = new byte[dataLength];
//		b.readBytes(data);
//	}

}
